package Helper;

import java.util.ArrayList;

/**
 * @author Wibi
 *
 */
/**
 * @author Wibi
 *
 */
/**
 * @author Wibi
 *
 */
public class ArrayHelper {
	/**
	 * Mengembalikan array of integer dengan ukuran = size dan nilai setiap elemen = value
	 * @param size Ukuran array
	 * @param value Nilai setiap elemen
	 * @return Array of integer
	 */
	public static int[] initArray(int size, int value) {
		int[] arrayInt = new int[size];
		for (int i = 0; i < size; i++)
			arrayInt[i] = value;
		
		return arrayInt;
	}
	
	/**
	 * Mengembalikan array of double dengan ukuran = size dan nilai setiap elemen = value
	 * @param size Ukuran array
	 * @param value Nilai setiap elemen
	 * @return Array of double h
	 */
	public static double[] initArray(int size, double value) {
		double[] arrayDouble = new double[size];
		for (int i = 0; i < size; i++)
			arrayDouble[i] = value;
		
		return arrayDouble;	
	}
	
	/**
	 * Mengembalikan array of String dengan ukuran = size dan nilai setiap elemen = value
	 * @param size Ukuran array
	 * @param value Nilai setiap elemen
	 * @return Array of String
	 */
	public String[] initArray(int size, String value) {
		String[] arrayString = new String[size];
		for (int i = 0; i < size; i++)
			arrayString[i] = value;
		
		return arrayString;
	}
	
	/**
	 * Mengembalikan array of boolean dengan ukuran = size dan nilai setiap elemen = value
	 * @param size Ukuran array
	 * @param value Nilai setiap elemen
	 * @return Array of boolean
	 */
	public static boolean[] initArray(int size, boolean value) {
		boolean[] arrayBool = new boolean[size];
		for (int i = 0; i < size; i++)
			arrayBool[i] = value;
		
		return arrayBool;
	}
	
	
	/**
	 * Mengembalikan hasil penjumlahan semua elemen array of integer
	 * @param arrayInt Array of integer yg akan dijumlahkan semua elemennya
	 * @return Integer
	 */
	public static int sumArray(int[] arrayInt) {
		int sum = 0;
		
		for (int x : arrayInt)
			sum += x;
		
		return sum;
	}
	
	/**
	 * Mengembalikan hasil penjumlahan semua elemen array of double
	 * @param arrayDouble Array of double yg akan dijumlahkan semua elemennya
	 * @return Integer
	 */
	public static double sumArray(double[] arrayDouble) {
		double sum = 0;
		
		for (double x : arrayDouble)
			sum += x;
		
		return sum;
	}
	
	/**
	 * Mengembalikan hasil perkalian semua elemen array of double
	 * @param arrayDouble Array of double yang akan dikalikan semua elemennya
	 * @return Double Hasil perkalian semua elemen array
	 */
	public static double multiplyArray(double[] arrayDouble) {
		double mult = 1;
		
		for (double x : arrayDouble)
			mult *= x;
		
		return mult;
	}
	
	/**
	 * Mengembalikan hasil perkalian semua elemen ArrayList<Double>
	 * @param arrayDouble ArrayList<Double> yang akan dikalikan semua elemennya
	 * @return Double Hasil perkalian semua elemen array
	 */
	public static double multiplyArray(ArrayList<Double> arrayDouble) {
		double mult = 1;
		
		for (double x : arrayDouble)
			mult *= x;
		
		return mult;
	}
	
	public static <T> T[] cloneArray(T[] source) {
		ArrayList<T> result = new ArrayList<>();
		for (int i = 0; i < source.length; i++) {
			result.add(source[i]);
		}
		
		return (T[])result.toArray();
	}
}
